package com.thread.sync.sync02;

public class RunThread extends Thread {
    /**
     * 使用volatile修饰变量,当变量改变时,会强制线程去从主内存中去重新读取变量
     * 此时读取到的是false,线程停止
     */
    private volatile boolean isRunning = true;

    public void setRunning(boolean isRunning) {
        this.isRunning = isRunning;
    }

    public void run() {
        System.out.println("进入run方法=====");
        while (isRunning == true) {
            //如果isRunning是true,就一直循环
        }
        System.out.println("线程停止");
    }

    /**
     * 线程开始时,会先从主内存中copy一份isRunning的值true来自己工作区间进行操作
     * 而设置false是设置主内存空间中的值,线程自己的值还是true,
     * 所以线程并不会停止
     */
    public static void main(String[] args) throws Exception {
        RunThread rt = new RunThread();
        rt.start();
        Thread.sleep(1000);
        rt.setRunning(false);//设置成false
        System.out.println("isRunning的值已经被设置成false");
    }

}
